package com.chenjun.utils;

import java.io.BufferedReader;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.io.OutputStream;
import java.io.OutputStreamWriter;
import java.io.RandomAccessFile;
import java.io.UnsupportedEncodingException;

public class FileUtils
{
	public static boolean createFile(File file) throws IOException
	{
		if (!file.exists())
		{
			makeDir(file.getParentFile());
		}
		return file.createNewFile();
	}

	// 若不存在 , 递归创建文件路径以及文件
	public static void makeDir(File dir)
	{
		if (!dir.getParentFile().exists())
		{
			makeDir(dir.getParentFile());
		}
		dir.mkdir();
	}

	// 返回目录下所有文件,非递归形式
	public static File[] getAllFilesByDir(String dirStr)
	{
		File root = new File(dirStr);
		File[] fs = root.listFiles();
		if (fs == null)
		{
			System.err.println("文件扫描出错!!!");
		}
		for (int i = 0; i < fs.length; i++)
		{
			System.out.println(fs[i].getAbsolutePath());
		}
		return fs;
	}

	/**
	 * A方法追加文件：使用RandomAccessFile
	 */
	public static void appendMethodA(String fileName, String content)
	{
		try
		{
			// 打开一个随机访问文件流，按读写方式
			RandomAccessFile randomFile = new RandomAccessFile(fileName, "rw");
			// 文件长度，字节数
			long fileLength = randomFile.length();
			// 将写文件指针移到文件尾。
			randomFile.seek(fileLength);
			randomFile.writeBytes(content);
			randomFile.close();
		}
		catch (IOException e)
		{
			e.printStackTrace();
		}
	}

	/**
	 * B方法追加文件：使用FileWriter
	 */
	public static void appendMethodB(String fileName, String content)
	{
		try
		{
			// 打开一个写文件器，构造函数中的第二个参数true表示以追加形式写文件
			FileWriter writer = new FileWriter(fileName, true);
			writer.write(content);
			writer.close();
		}
		catch (IOException e)
		{
			e.printStackTrace();
		}
	}

	/**
	 * 以行为单位读取文件，常用于读面向行的格式化文件
	 */
	public static void readFileByLines(String fileName)
	{
		File file = new File(fileName);
		BufferedReader reader = null;
		try
		{
			System.out.println("以行为单位读取文件内容，一次读一整行：");
			reader = new BufferedReader(new FileReader(file));
			String tempString = null;
			int line = 1;
			// 一次读入一行，直到读入null为文件结束
			while ((tempString = reader.readLine()) != null)
			{
				// 显示行号
				System.out.println("line " + line + ": " + tempString);
				line++;
			}
			reader.close();
		}
		catch (IOException e)
		{
			e.printStackTrace();
		}
		finally
		{
			if (reader != null)
			{
				try
				{
					reader.close();
				}
				catch (IOException e1)
				{
				}
			}
		}
	}
	
	/**
	 * 向空文件中写入字符
	 * @throws IOException 
	 * @throws UnsupportedEncodingException 
	 */
	public static void writeFile(String fileName, String content) throws  IOException
	{
		File file = new File(fileName);
		OutputStream outputStream = new FileOutputStream(file);
		outputStream.write(content.getBytes("UTF-8"));
		outputStream.close();
	}
}
